// 聊天会话成员表映射对象
#pragma once
#include <cstddef>
#include <odb/core.hxx>
#include <string>

namespace ken_im
{
#pragma db object table( "chat_session_member" )
/**
 * @class ChatSessionMember
 * @brief ChatSessionMember 类用于表示聊天会话中的成员，包括会话ID和用户ID。
 *
 * 该类主要用于存储和操作聊天会话成员的信息，包括会话ID和用户ID。它提供了获取和设置会话ID和用户ID的方法。
 *
 * @note 该类使用了ODB（Object Data
 * Base）库进行数据库操作，因此需要ODB库的支持。
 *
 * @example
 * ChatSessionMember member("session123", "user456");
 * std::string ssid = member.session_id();
 * std::string uid = member.user_id();
 * member.session_id("session789");
 * member.user_id("user789");
 */
class ChatSessionMember
{
  public:
    /**
     * @brief 默认构造函数，用于创建一个空的 ChatSessionMember 对象。
     */
    ChatSessionMember()
    {
    }

    /**
     * @brief 构造函数，用于创建一个 ChatSessionMember
     * 对象，并初始化会话ID和用户ID。
     *
     * @param ssid 会话ID
     * @param uid 用户ID
     */
    ChatSessionMember( const std::string &ssid, const std::string &uid )
        : _session_id( ssid ), _user_id( uid )
    {
    }

    /**
     * @brief 析构函数，用于销毁 ChatSessionMember 对象。
     */
    ~ChatSessionMember()
    {
    }

    /**
     * @brief 获取会话ID。
     *
     * @return 会话ID的字符串表示。
     */
    std::string session_id() const
    {
        return _session_id;
    }

    /**
     * @brief 设置会话ID。
     *
     * @param ssid 新的会话ID。
     */
    void session_id( std::string &ssid )
    {
        _session_id = ssid;
    }

    /**
     * @brief 获取用户ID。
     *
     * @return 用户ID的字符串表示。
     */
    std::string user_id() const
    {
        return _user_id;
    }

    /**
     * @brief 设置用户ID。
     *
     * @param uid 新的用户ID。
     */
    void user_id( std::string &uid )
    {
        _user_id = uid;
    }

  private:
    friend class odb::access;
#pragma db id auto
    unsigned long _id;
#pragma db type( "varchar(64)" ) index
    std::string _session_id;
#pragma db type( "varchar(64)" )
    std::string _user_id;
};
} // namespace ken_im